package ag;

import java.util.TreeSet;
import java.util.LinkedList;
import java.util.Set;

public class AlgoritmoGenetico {
	
	public Set<Individuo> optimizar(int iteraciones, Set<Individuo> poblacionInicial, Selector selector){
		
		LinkedList<Individuo> poblacion = new LinkedList<Individuo>(poblacionInicial);
		
		for(int i = 0; i < iteraciones; i++){
			
			int individuos = poblacion.size();
			
			Individuo [] vPoblacion = poblacion.toArray(new Individuo[individuos]);
			
			for(int j = 0; j < individuos; j++){
				int a = (int) (Math.random()*((double)individuos));
				Individuo individuoA = vPoblacion[a];
				
				a = (int) (Math.random()*((double)individuos));
				Individuo individuoB = vPoblacion[a];
				
				Individuo individuoC = individuoA.cruzar(individuoB);
										
				poblacion.add(individuoC);
			}
			
			poblacion = selector.seleccionar(poblacion);
			
			if (selector.getConvergencia() > poblacion.size()*0.9 ) break;
		}
		
		return new TreeSet<Individuo>(poblacion);
	}
}
